package co.com.inventarios.vista;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import co.com.inventarios.logica.CataventaLogica;
import co.com.inventarios.logica.ICataventaLogica;
import co.com.inventarios.logica.IMngclaseLogica;
import co.com.inventarios.logica.IRequisicionLogica;
import co.com.inventarios.logica.IUnimedLogica;
import co.com.inventarios.logica.MngclaseLogica;
import co.com.inventarios.logica.RequisicionLogica;
import co.com.inventarios.logica.UnimedLogica;
import co.com.inventarios.modelo.Cataventa;
import co.com.inventarios.modelo.CataventaWork;
import co.com.inventarios.modelo.Catvtapro;
import co.com.inventarios.modelo.CatvtaproId;
import co.com.inventarios.modelo.CatvtaproWork;
import co.com.inventarios.modelo.Mngclase;
import co.com.inventarios.modelo.MngclaseWork;
import co.com.inventarios.modelo.Producto;
import co.com.inventarios.modelo.Prounimed;
import co.com.inventarios.modelo.RequiPro;
import co.com.inventarios.modelo.RequiProWork;
import co.com.inventarios.modelo.Unimed;
import co.com.inventarios.modelo.Vinculado;
import co.com.inventarios.utils.MessageBundleLoader;
import co.com.inventarios.utils.SessionUtil;
import co.com.inventarios.utils.SessionVars;
import co.com.inventarios.utils.Utilidades;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.ext.RowSelectorEvent;

public class Cataventa_MB {
	private int swestado = 0; // 0 null, 1 nuevo, 2 editando
	private HtmlCommandButton cmdelimina;
	private HtmlCommandButton cmdedita;
	private HtmlCommandButton cmdnuevo;
	private String nombreEliminar;
	private HtmlInputText txtBuscar;
	private String buscar;
	private Utilidades Utils;
	private Producto miProducto;
	private Cataventa regEdicion = new Cataventa();
	private HtmlSelectOneMenu seleconebusqueda;
	private String busbtipo;
	private String nombreEliminarpro;
	private CataventaWork[] cataventaw;
	private String busquedacmbbus;
	private ICataventaLogica Cataventa_logica;
	private List<Cataventa> listCataventa = new ArrayList<Cataventa>();
	private boolean modalRendered;
	private boolean claseselec;
	private Date fechabusca;
	private boolean busqueda1 = true;
	private boolean busqueda2 = false;
	private boolean busqueda3 = false;
	private boolean busqueda4 = false;
	private boolean busqueda5 = false;
	private int regTable;
	private String busuario = (String) SessionUtil.get(SessionVars.USER);
	private String busunombre = (String) SessionUtil.get(SessionVars.USUNOMBRE);
	// agregar producto
	private Unimed MiUnimed;
	private CatvtaproId MiCatvtaproId;
	private Catvtapro MiCatvtapro;
	private CatvtaproWork[] catavpro;
	private Catvtapro cataproEdicion = new Catvtapro();
	private List<Catvtapro> listCatvtapro;
	private boolean proselec = false;
	private boolean modalRenderedpro;
	private boolean modalRenderedproelm;
	private HtmlInputText txtBuscarpro;
	private String busquedacmb;
	private String buscarpro;
	private HtmlCommandButton popup_cmdselecionar;
	private List<Producto> listProductos;
	private String aproducto;
	private String apronombre;
	private String aprounidad;
	private Double aprocantidad;
	private Double aprecio;
	private String acatalogo;
	private Date bfechaenv;
	private IRequisicionLogica ReqDoc_logica;
	private HtmlInputText txtaproducto;
	private HtmlInputText txtapronombre;
	private HtmlInputText txtaprocantidad;
	private HtmlSelectOneMenu txtbodegasbus;
	private String selectedunimed;
	private IUnimedLogica logicaUnimed;
	private List<Prounimed> listaUnimed;
	private SelectItem[] sel_unimed;

	public void rowSelectionListenerPro(RowSelectorEvent event) {

		CatvtaproWork requisicion = null;
		CatvtaproWork[] lista = getcatavpro();
		proselec = true;
		for (int i = 0; i < getcatavpro().length; i++) {
			requisicion = lista[i];
			if (requisicion.isSelected()) {
				cataproEdicion = requisicion.getCatvtaprow();
			}
		}

	}

	public void setcatavpro(CatvtaproWork[] catavpro) {
		this.catavpro = catavpro;
	}

	public CatvtaproWork[] getcatavpro() {
		Cataventa_logica = new CataventaLogica();
		if (catavpro == null) {
			try {
				if (listCatvtapro != null) {
					catavpro = Cataventa_logica
							.findCataventaproSelectedRow(listCatvtapro);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return catavpro;
	}

	public void setlistCatvtapro(List<Catvtapro> listCatvtapro) {
		this.listCatvtapro = listCatvtapro;
	}

	public List<Catvtapro> getlistCatvtapro() {
		Cataventa_logica = new CataventaLogica();

		try {
			if (swnuevo != true) {
				listCatvtapro = Cataventa_logica.findCataventapro(bcodigo);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listCatvtapro;
	}

	public HtmlCommandButton getCmdelimina() {
		return cmdelimina;
	}

	public Producto getMiProducto() {
		return miProducto;
	}

	public void setMiProducto(Producto miProducto) {
		this.miProducto = miProducto;
	}

	public Unimed getMiUnimed() {
		return MiUnimed;
	}

	public void setMiUnimed(Unimed miUnimed) {
		MiUnimed = miUnimed;
	}

	public boolean isModalRenderedproelm() {
		return modalRenderedproelm;
	}

	public void setModalRenderedproelm(boolean modalRenderedproelm) {
		this.modalRenderedproelm = modalRenderedproelm;
	}

	public CatvtaproId getMiCatvtaproId() {
		return MiCatvtaproId;
	}

	public void setMiCatvtaproId(CatvtaproId miCatvtaproId) {
		MiCatvtaproId = miCatvtaproId;
	}

	public boolean isProselec() {
		return proselec;
	}

	public void setProselec(boolean proselec) {
		this.proselec = proselec;
	}

	public Catvtapro getCataproEdicion() {
		return cataproEdicion;
	}

	public void setCataproEdicion(Catvtapro cataproEdicion) {
		this.cataproEdicion = cataproEdicion;
	}

	public String getNombreEliminarpro() {
		return nombreEliminarpro;
	}

	public void setNombreEliminarpro(String nombreEliminarpro) {
		this.nombreEliminarpro = nombreEliminarpro;
	}

	public void setCmdelimina(HtmlCommandButton cmdelimina) {
		this.cmdelimina = cmdelimina;
	}

	public HtmlCommandButton getCmdedita() {
		return cmdedita;
	}

	public String getSelectedunimed() {
		return selectedunimed;
	}

	public List<Producto> getListProductos() throws Exception {
		return listProductos;
	}

	public void setListProductos(List<Producto> listProductos) {
		this.listProductos = listProductos;
	}

	public void setSelectedunimed(String selectedunimed) {
		this.selectedunimed = selectedunimed;
	}

	public IUnimedLogica getLogicaUnimed() {
		return logicaUnimed;
	}

	public boolean isModalRenderedpro() {
		return modalRenderedpro;
	}

	public void setModalRenderedpro(boolean modalRenderedpro) {
		this.modalRenderedpro = modalRenderedpro;
	}

	public HtmlInputText getTxtBuscarpro() {
		return txtBuscarpro;
	}

	public HtmlCommandButton getPopup_cmdselecionar() {
		return popup_cmdselecionar;
	}

	public void setPopup_cmdselecionar(HtmlCommandButton popup_cmdselecionar) {
		this.popup_cmdselecionar = popup_cmdselecionar;
	}

	public void setTxtBuscarpro(HtmlInputText txtBuscarpro) {
		this.txtBuscarpro = txtBuscarpro;
	}

	public String getBusquedacmb() {
		return busquedacmb;
	}

	public void setBusquedacmb(String busquedacmb) {
		this.busquedacmb = busquedacmb;
	}

	public void setLogicaUnimed(IUnimedLogica logicaUnimed) {
		this.logicaUnimed = logicaUnimed;
	}

	public Date getFechabusca() {
		return fechabusca;
	}

	public String getBuscarpro() {
		return buscarpro;
	}

	public void setBuscarpro(String buscarpro) {
		this.buscarpro = buscarpro;
	}

	public SelectItem[] getSel_unimed() {

		if (sel_unimed == null && this.aproducto != null) {
			listaUnimed = null;
			listaUnimed = getListaUnimed(this.aproducto);
			sel_unimed = new SelectItem[listaUnimed.size()];
			int i = 0;
			for (Prounimed obj : listaUnimed) {
				sel_unimed[i] = new SelectItem(obj.getUnimed().getUmdcodigo(),
						obj.getUnimed().getUmdnombre());
				i++;
			}
		}
		return sel_unimed;
	}

	public List<Prounimed> getListaUnimed(String producto) {
		logicaUnimed = new UnimedLogica();
		if (listaUnimed == null && producto != null) {
			try {
				listaUnimed = logicaUnimed.buscarTodosProUnimed(producto);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return listaUnimed;
	}

	public void setListaUnimed(List<Prounimed> listaUnimed) {
		this.listaUnimed = listaUnimed;
	}

	public void setSel_unimed(SelectItem[] sel_unimed) {
		this.sel_unimed = sel_unimed;
	}

	public void setFechabusca(Date fechabusca) {
		this.fechabusca = fechabusca;
	}

	public boolean isBusqueda1() {
		return busqueda1;
	}

	public void setBusqueda1(boolean busqueda1) {
		this.busqueda1 = busqueda1;
	}

	public boolean isBusqueda2() {
		return busqueda2;
	}

	public Utilidades getUtils() {
		return Utils;
	}

	public void setUtils(Utilidades utils) {
		Utils = utils;
	}

	public String getAproducto() {
		return aproducto;
	}

	public void setAproducto(String aproducto) {
		this.aproducto = aproducto;
	}

	public String getApronombre() {
		return apronombre;
	}

	public void setApronombre(String apronombre) {
		this.apronombre = apronombre;
	}

	public String getAprounidad() {
		return aprounidad;
	}

	public void setAprounidad(String aprounidad) {
		this.aprounidad = aprounidad;
	}

	public Double getAprocantidad() {
		return aprocantidad;
	}

	public void setAprocantidad(Double aprocantidad) {
		this.aprocantidad = aprocantidad;
	}

	public Double getAprecio() {
		return aprecio;
	}

	public void setAprecio(Double aprecio) {
		this.aprecio = aprecio;
	}

	public String getAcatalogo() {
		return acatalogo;
	}

	public void setAcatalogo(String acatalogo) {
		this.acatalogo = acatalogo;
	}

	public Date getBfechaenv() {
		return bfechaenv;
	}

	public void setBfechaenv(Date bfechaenv) {
		this.bfechaenv = bfechaenv;
	}

	public HtmlInputText getTxtaproducto() {
		return txtaproducto;
	}

	public void setTxtaproducto(HtmlInputText txtaproducto) {
		this.txtaproducto = txtaproducto;
	}

	public HtmlInputText getTxtapronombre() {
		return txtapronombre;
	}

	public void setTxtapronombre(HtmlInputText txtapronombre) {
		this.txtapronombre = txtapronombre;
	}

	public HtmlInputText getTxtaprocantidad() {
		return txtaprocantidad;
	}

	public void setTxtaprocantidad(HtmlInputText txtaprocantidad) {
		this.txtaprocantidad = txtaprocantidad;
	}

	public HtmlSelectOneMenu getTxtbodegasbus() {
		return txtbodegasbus;
	}

	public void setTxtbodegasbus(HtmlSelectOneMenu txtbodegasbus) {
		this.txtbodegasbus = txtbodegasbus;
	}

	public void setBusqueda2(boolean busqueda2) {
		this.busqueda2 = busqueda2;
	}

	public boolean isBusqueda3() {
		return busqueda3;
	}

	public Cataventa getRegEdicion() {
		return regEdicion;
	}

	public void setRegEdicion(Cataventa regEdicion) {
		this.regEdicion = regEdicion;
	}

	public String getBusuario() {
		return busuario;
	}

	public void setBusuario(String busuario) {
		this.busuario = busuario;
	}

	public String getBusunombre() {
		return busunombre;
	}

	public void setBusunombre(String busunombre) {
		this.busunombre = busunombre;
	}

	public void setBusqueda3(boolean busqueda3) {
		this.busqueda3 = busqueda3;
	}

	public boolean isBusqueda4() {
		return busqueda4;
	}

	public void setBusqueda4(boolean busqueda4) {
		this.busqueda4 = busqueda4;
	}

	public boolean isBusqueda5() {
		return busqueda5;
	}

	public void setBusqueda5(boolean busqueda5) {
		this.busqueda5 = busqueda5;
	}

	public boolean isClaseselec() {
		return claseselec;
	}

	public void setClaseselec(boolean claseselec) {
		this.claseselec = claseselec;
	}

	public boolean isModalRendered() {
		return modalRendered;
	}

	public int getRegTable() {
		return regTable;
	}

	public void setRegTable(int regTable) {
		this.regTable = regTable;
	}

	public void setModalRendered(boolean modalRendered) {
		this.modalRendered = modalRendered;
	}

	public void setCmdedita(HtmlCommandButton cmdedita) {
		this.cmdedita = cmdedita;
	}

	public HtmlCommandButton getCmdnuevo() {
		return cmdnuevo;
	}

	public void setCmdnuevo(HtmlCommandButton cmdnuevo) {
		this.cmdnuevo = cmdnuevo;
	}

	public String getNombreEliminar() {
		return nombreEliminar;
	}

	public void setNombreEliminar(String nombreEliminar) {
		this.nombreEliminar = nombreEliminar;
	}

	public HtmlInputText getTxtBuscar() {
		return txtBuscar;
	}

	public void setTxtBuscar(HtmlInputText txtBuscar) {
		this.txtBuscar = txtBuscar;
	}

	public String getBuscar() {
		return buscar;
	}

	public void setBuscar(String buscar) {
		this.buscar = buscar;
	}

	public HtmlSelectOneMenu getSeleconebusqueda() {
		return seleconebusqueda;
	}

	public void setSeleconebusqueda(HtmlSelectOneMenu seleconebusqueda) {
		this.seleconebusqueda = seleconebusqueda;
	}

	public String getBusbtipo() {
		return busbtipo;
	}

	public void setBusbtipo(String busbtipo) {
		this.busbtipo = busbtipo;
	}

	public void setlistListCataventa(List<Cataventa> listCataventa) {
		this.listCataventa = listCataventa;
	}

	public List<Cataventa> getlistCataventa() {
		return listCataventa;
	}

	public void setCataventaw(CataventaWork[] cataventaw) {
		this.cataventaw = cataventaw;
	}

	public CataventaWork[] getCataventaw() {
		Cataventa_logica = new CataventaLogica();
		if (cataventaw == null) {
			try {
				if (listCataventa.size() > 0) {
					cataventaw = Cataventa_logica
							.findCataventaSelectedRow(listCataventa);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return cataventaw;
	}

	public String getBusquedacmbbus() {
		return busquedacmbbus;
	}

	public void setBusquedacmbbus(String busquedacmbbus) {
		this.busquedacmbbus = busquedacmbbus;
	}

	public void rowSelectionListener(RowSelectorEvent event) {
		CataventaWork regCataventa = null;
		CataventaWork[] lista = getCataventaw();
		claseselec = true;
		for (int i = 0; i < getCataventaw().length; i++) {
			regCataventa = lista[i];
			if (regCataventa.isSelected()) {
				regEdicion = regCataventa.getCataventaw();
				regTable = i;
			}
		}
	}

	public void action_selecBusqueda(ValueChangeEvent vcex) {
		if (vcex.getNewValue() != null) {
			busquedacmbbus = vcex.getNewValue().toString();

			if (busquedacmbbus.equals("docnumero")) {
				busqueda1 = true;
				busqueda2 = false;
				busqueda3 = false;
				busqueda4 = false;
				busqueda5 = false;
			} else {
				if (busquedacmbbus.equals("docfecha")) {
					busqueda1 = false;
					busqueda2 = false;
					busqueda3 = true;
					busqueda4 = false;
					busqueda5 = false;
					Date today = new Date();
					fechabusca = today;
				} else {
					if (busquedacmbbus.equals("docestado")) {
						busqueda1 = false;
						busqueda2 = true;
						busqueda3 = false;
						busqueda4 = false;
						busqueda5 = false;
					} else {
						if (busquedacmbbus.equals("docbodent")) {
							busqueda1 = false;
							busqueda2 = false;
							busqueda3 = false;
							busqueda4 = true;
							busqueda5 = false;
						} else {
							busqueda1 = false;
							busqueda2 = false;
							busqueda3 = false;
							busqueda4 = false;
							busqueda5 = false;

						}
					}
				}
			}
		}
	}

	public void action_Buscar(ActionEvent ae) {
		proselec = false;
		Cataventa_logica = new CataventaLogica();
		claseselec = false;
		try {
			if (busquedacmbbus.equals("catcodigo")) {
				if (buscar.length() > 0) {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Codigo :" + buscar));
					listCataventa.clear();
					listCataventa = Cataventa_logica.findByPropertyAll(
							"catcodigo", buscar, "");
					listCataventa = getlistCataventa();
					cataventaw = null;
				} else {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(
									"Debe Agregar un valor de busqueda"));
				}

			} else {
				if (busquedacmbbus.equals("catnombre")) {

					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Nombre :" + buscar));
					listCataventa.clear();
					listCataventa = Cataventa_logica.findByPropertyAll(
							"catnombre", buscar, "");
					listCataventa = getlistCataventa();
					cataventaw = null;

				} else {

					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Todos."));

					listCataventa.clear();
					listCataventa = Cataventa_logica.findAll("");
					listCataventa = getlistCataventa();
					cataventaw = null;

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void Activapopupeliminar(ActionEvent ae) {
		modalRendered = !modalRendered;
	}

	public void action_confirmacionEliminar(ActionEvent ae) {
		if (claseselec == true) {
			if (cataventaw != null) {
				Cataventa_logica = new CataventaLogica();
				try {
					setNombreEliminar("Catalogo Codigo :"
							+ regEdicion.getCatcodigo() + " Nombre :"
							+ regEdicion.getCatnombre());
				} catch (Exception e) {
					e.printStackTrace();
				}
				Activapopupeliminar(ae);
			} else {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Debe seleccionar una Catalogo"));
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar una Catalogo"));
		}
	}

	public void action_EliminarTabla(ActionEvent ae) {
		Cataventa_logica = new CataventaLogica();
		Activapopupeliminar(ae);
		if (regEdicion == null || claseselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar un Catalogo"));
		} else {
			try {
				Cataventa_logica.Eliminar_Cataventa(regEdicion);
				listCataventa.remove(regTable);
				cataventaw = null;
				regEdicion = null;
				claseselec = false;
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Registro eliminado Satisfactoriamente."));
			} catch (Exception e) {
				e.printStackTrace();
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"No se puede eliminar el registro, tiene movimiento."));
			}

		}
	}

	// //////////////////////////
	// ////////////////////////// Unimed Propiedades // ////////////////////////
	// //////////////////////////

	private HtmlInputText txtcodigo;
	private HtmlInputText txtnombre;
	private HtmlInputText txtusunombre;
	private HtmlInputText txtusuario;
	private boolean sweditando = false;
	private boolean swnuevo = false;
	private boolean modalRenderedproventa = false;
	private boolean bactivo;
	private boolean modalRenderedguardar;
	private boolean modalRenderedcancelar;
	private String bcodigo;
	private String bnombre;
	private Cataventa MiCataventa;

	public HtmlInputText getTxtcodigo() {
		return txtcodigo;
	}

	public void setTxtcodigo(HtmlInputText txtcodigo) {
		this.txtcodigo = txtcodigo;
	}

	public HtmlInputText getTxtnombre() {
		return txtnombre;
	}

	public void setTxtnombre(HtmlInputText txtnombre) {
		this.txtnombre = txtnombre;
	}

	public HtmlInputText getTxtusunombre() {
		return txtusunombre;
	}

	public void setTxtusunombre(HtmlInputText txtusunombre) {
		this.txtusunombre = txtusunombre;
	}

	public HtmlInputText getTxtusuario() {
		return txtusuario;
	}

	public void setTxtusuario(HtmlInputText txtusuario) {
		this.txtusuario = txtusuario;
	}

	public boolean isSweditando() {
		return sweditando;
	}

	public void setSweditando(boolean sweditando) {
		this.sweditando = sweditando;
	}

	public boolean isSwnuevo() {
		return swnuevo;
	}

	public void setSwnuevo(boolean swnuevo) {
		this.swnuevo = swnuevo;
	}

	public boolean isBactivo() {
		return bactivo;
	}

	public String getBcodigo() {
		return bcodigo;
	}

	public void setBcodigo(String bcodigo) {
		this.bcodigo = bcodigo;
	}

	public String getBnombre() {
		return bnombre;
	}

	public void setBnombre(String bnombre) {
		this.bnombre = bnombre;
	}

	public Cataventa getMiCataventa() {
		return MiCataventa;
	}

	public void setMiCataventa(Cataventa miCataventa) {
		MiCataventa = miCataventa;
	}

	public void setBactivo(boolean bactivo) {
		this.bactivo = bactivo;
	}

	public boolean isModalRenderedguardar() {
		return modalRenderedguardar;
	}

	public void setModalRenderedguardar(boolean modalRenderedguardar) {
		this.modalRenderedguardar = modalRenderedguardar;
	}

	public boolean isModalRenderedcancelar() {
		return modalRenderedcancelar;
	}

	public void setModalRenderedcancelar(boolean modalRenderedcancelar) {
		this.modalRenderedcancelar = modalRenderedcancelar;
	}

	public int getSwestado() {
		return swestado;
	}

	public void setSwestado(int swestado) {
		this.swestado = swestado;
	}

	public String action_modificar() {
		swnuevo = false;
		sweditando = true;
		return "";
	}

	public void popupAccion_proventa(ActionEvent ae) {
		modalRenderedproventa = !modalRenderedproventa;
	}

	public void validaId(ActionEvent ae) {
		try {
			MiCataventa = new Cataventa();
			Utils = new Utilidades();
			bcodigo = Utils.Completar_Cadena(bcodigo, " ", 5);
			MiCataventa = Cataventa_logica.consultarRegCataventa(bcodigo);
			if (MiCataventa != null) {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Este codigo Catalogo ya existe"));
				bcodigo = "";
			} else {
				txtnombre.requestFocus();
			}
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

	public void toggleModalguardar(ActionEvent ae) {
		try {
			MiCataventa = new Cataventa();
			Utils = new Utilidades();
			bcodigo = Utils.Completar_Cadena(bcodigo, " ", 5);
			MiCataventa = Cataventa_logica.consultarRegCataventa(bcodigo);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		if (MiCataventa != null && swnuevo == true) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Este codigo de Catalogo ya existe"));
		} else {
			if (bcodigo.trim() == "" || bcodigo == null
					|| bcodigo.equals("     ")) {
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Debe agregar un Codigo para el Catalogo"));
			} else {
				if (bnombre == "" || bnombre == null) {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(
									"Debe agregar un Nombre para el Catalogo"));
				} else {
					modalRenderedguardar = !modalRenderedguardar;
				}
			}
		}

	}

	public void toggleModalcancelar(ActionEvent ae) {
		modalRenderedcancelar = !modalRenderedcancelar;
	}

	public String action_salir() {
		listCataventa.clear();
		listCataventa.add(MiCataventa);
		return "Cataventa_B";
	}

	// action_Cancelar
	public String action_cancelar() {
		modalRenderedcancelar = !modalRenderedcancelar;
		return "Cataventa_B";
	}

	public String action_guardar() {

		Cataventa_logica = new CataventaLogica();
		String retornar = "";

		MiCataventa = null;
		MiCataventa = new Cataventa();

		if (swnuevo == true) {
			Utils = new Utilidades();
			bcodigo = Utils.Completar_Cadena(bcodigo, " ", 5);
			MiCataventa.setCatcodigo(bcodigo);
			retornar = "";
		} else {
			try {
				MiCataventa = regEdicion;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		MiCataventa.setCatnombre(bnombre);
		if (bactivo == true) {
			MiCataventa.setCatactivo(new Long(1));
		} else {
			MiCataventa.setCatactivo(new Long(0));
		}
		modalRenderedguardar = !modalRenderedguardar;
		try {
			
			menu_ppal_MB obje = (menu_ppal_MB)FacesUtils.getManagedBean("menu_ppal_MB");
			MiCataventa.setDlluser(obje.getMiDlluser());
			
			if (swnuevo == true) {
				MiCataventa.setCatlogfec(new Timestamp(Calendar.getInstance()
						.getTimeInMillis()));
				regEdicion = MiCataventa;
				Cataventa_logica.Guarda_Cataventa(MiCataventa);

			} else {
				Cataventa_logica.Modifica_Cataventa(MiCataventa);
			}
			listCataventa.clear();
			listCataventa.add(MiCataventa);
			cataventaw = null;
			// regEdicion = null;
			sweditando = false;
			swnuevo = false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return retornar;
	}

	public String action_Nuevo() {
		swestado = 1;
		proselec = false;
		sweditando = true;
		swnuevo = true;
		bcodigo = null;
		bnombre = null;
		bactivo = true;
		listCatvtapro = null;
		catavpro = null;
		cataproEdicion = null;
		return "Cataventa_P";
	}

	public String action_Editar() {

		String retornar = "";
		if (regEdicion == null  ||  claseselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar un Catalogo"));
		} else {

			MiCataventa = null;
			Cataventa_logica = new CataventaLogica();
			try {
				MiCataventa = Cataventa_logica.consultarRegCataventa(regEdicion
						.getCatcodigo());
				if (MiCataventa != null) {
					swestado = 2;
					sweditando = false;
					swnuevo = false;
					bcodigo = MiCataventa.getCatcodigo();
					bnombre = MiCataventa.getCatnombre();

					if (MiCataventa.getCatactivo().longValue() == 1) {
						bactivo = true;
					} else {
						bactivo = false;
					}

					listCatvtapro = null;
					listCatvtapro = getlistCatvtapro();
					catavpro = null;
					retornar = "Cataventa_P";
				}

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return retornar;

	}

	public void action_Validaproducto(ActionEvent ae) throws Exception {

		miProducto = null;
		ReqDoc_logica = new RequisicionLogica();
		apronombre = null;
		aprounidad = null;
		aprecio = null;
		acatalogo = null;

		miProducto = ReqDoc_logica.consultarRequiProducto(aproducto);
		if (miProducto == null) {
			apronombre = "Producto no valido.";
			aprounidad = null;
			aprecio = null;
			acatalogo = null;
			aprocantidad = null;
			listaUnimed = null;
			sel_unimed = null;
			txtaproducto.requestFocus();
		} else {
			apronombre = miProducto.getPronombre();
			listaUnimed = null;
			listaUnimed = getListaUnimed(this.aproducto);
			sel_unimed = null;
			sel_unimed = getSel_unimed();
			getSel_unimed();

			aprecio = null;
			aprocantidad = null;
			acatalogo = null;
			txtaprocantidad.requestFocus();
		}

	}

	public void popupAccion_Cerrar(ActionEvent ae) {
		modalRenderedpro = !modalRenderedpro;
	}

	public void toggleModalpro(ActionEvent ae) {
		modalRenderedproelm = !modalRenderedproelm;
	}

	public void popupAccion_Selecionar(ActionEvent ae) throws Exception {

		this.txtaproducto.setValue(popup_cmdselecionar.getValue().toString());
		aproducto = popup_cmdselecionar.getValue().toString();
		action_Validaproducto(ae);
		modalRenderedpro = !modalRenderedpro;
	}

	public void action_BuscarPro(ActionEvent ae) {

		listProductos = null;
		ReqDoc_logica = new RequisicionLogica();

		try {
			if (busquedacmb.equals("procodigo")) {
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(MessageBundleLoader
								.getMessage("busqueda.mensaje")
								+ " Codigo :" + buscarpro));

				listProductos = ReqDoc_logica.consultarProductosLike(
						"procodigo", buscarpro.toUpperCase());

			} else {
				if (busquedacmb.equals("pronombre")) {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Nombre :" + buscarpro));

					listProductos = ReqDoc_logica.consultarProductosLike(
							"pronombre", buscarpro.toUpperCase());
				} else {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Todos."));

					listProductos = ReqDoc_logica.buscarTodosProductos();

				}
			}

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public String action_GuardarCataPro() throws Exception {
		proselec = false;

		Cataventa_logica = new CataventaLogica();
		miProducto = ReqDoc_logica.consultarRequiProducto(aproducto);
		if (miProducto == null) {
			apronombre = "Producto no valido.";
		}

		if (apronombre == "" || apronombre == null || aprocantidad == null
				|| apronombre == "Producto no valido."
				|| selectedunimed == null || selectedunimed == ""
				|| aprocantidad == 0) {
			FacesContext
					.getCurrentInstance()
					.addMessage(
							"msg",
							new FacesMessage(
									"Debe Validar El Producto y Agregar el Precio de Producto"));

		} else {
			// MiUnimed = new Unimed();
			// MiUnimed.setUmdcodigo(selectedunimed);
			MiCatvtaproId = new CatvtaproId();
			MiCatvtaproId.setCvpcatalog(MiCataventa.getCatcodigo());
			MiCatvtaproId.setCvpproduct(miProducto.getProcodigo());
			MiCatvtaproId.setCvpunimed(miProducto.getUnimed().getUmdcodigo());

			MiCatvtapro = Cataventa_logica.Busca_CataventaPro(MiCatvtaproId);

			if (MiCatvtapro == null) {
				MiCatvtapro = new Catvtapro();
				MiCatvtapro.setId(MiCatvtaproId);
				MiCatvtapro.setCataventa(MiCataventa);
				MiCatvtapro.setProducto(miProducto);
				MiCatvtapro.setUnimed(miProducto.getUnimed());
				MiCatvtapro.setCvpvalor(aprocantidad);
				MiCatvtapro.setCvpactivo(Long.valueOf("1"));

				Cataventa_logica.Guarda_CataventaPro(MiCatvtapro);

				aproducto = null;
				apronombre = null;
				aprounidad = null;
				aprecio = null;
				acatalogo = null;
				aprocantidad = null;
				txtaproducto.requestFocus();

				listCatvtapro = null;
				listCatvtapro = getlistCatvtapro();
				catavpro = null;
			} else {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"El Producto "
												+ MiCatvtaproId.getCvpproduct()
												+ " ya se encuentra registardo en este Catalogo"));
			}
		}
		return "retornar";
	}

	public void action_confirmacionEliminarPro(ActionEvent ae) {

		if (proselec == true) {

			if (catavpro != null) {

				if (cataproEdicion != null) {
					setNombreEliminarpro(" Codigo : "
							+ cataproEdicion.getProducto().getProcodigo()
							+ "         " + " Nombre : "
							+ cataproEdicion.getProducto().getPronombre());

					toggleModalpro(ae);
				} else {
					FacesContext.getCurrentInstance().addMessage("msg",
							new FacesMessage("Debe seleccionar un Producto"));
				}
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar un Producto"));
		}
	}

	public boolean isModalRenderedproventa() {
		return modalRenderedproventa;
	}

	public void setModalRenderedproventa(boolean modalRenderedproventa) {
		this.modalRenderedproventa = modalRenderedproventa;
	}

	public Catvtapro getMiCatvtapro() {
		return MiCatvtapro;
	}

	public void setMiCatvtapro(Catvtapro miCatvtapro) {
		MiCatvtapro = miCatvtapro;
	}

	public void action_EliminarTablaPro(ActionEvent ae) {
		if (proselec == true) {
			Cataventa_logica = new CataventaLogica();
			toggleModalpro(ae);
			try {
				Cataventa_logica.Eliminar_CataventaPro(cataproEdicion);
				listCatvtapro = null;
				listCatvtapro = getlistCatvtapro();
				catavpro = null;
				proselec = false;

				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Se actualizo satisfactoriamente"));
			} catch (Exception e) {
				e.printStackTrace();
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"No se puede eliminar el registro tiene movimiento."));
			}
		}

	}

	public void action_EliminarTablaPro_pop(ActionEvent ae) {

		if (proselec == true) {

			if (catavpro != null) {

				if (cataproEdicion != null) {

					Cataventa_logica = new CataventaLogica();
					try {
						Cataventa_logica.Eliminar_CataventaPro(cataproEdicion);
						listCatvtapro = null;
						listCatvtapro = getlistCatvtapro();
						catavpro = null;
						proselec = false;
						FacesContext.getCurrentInstance().addMessage(
								"msg",
								new FacesMessage(
										"Se actualizo satisfactoriamente"));
					} catch (Exception e) {
						e.printStackTrace();
						FacesContext
								.getCurrentInstance()
								.addMessage(
										"msg",
										new FacesMessage(
												"No se puede eliminar el registro tiene movimiento."));
					}

				} else {
					FacesContext.getCurrentInstance().addMessage("msg",
							new FacesMessage("Debe seleccionar un Producto"));
				}
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar un Producto"));
		}

	}

}
